在看 Google 的一个 Sample 中,看到了这么的一段代码:
|
|
这个项目中仅在一处或判断采用了 |
,其他部分都使用||
。
两个运算值都是boolean
类型,初步看来显然两者的结果、运行效果应该是相同的。我不太清楚这里是否是作者刻意为之,加之好奇还是进行了 Google。
结果还是很意思的,但其实也在预料之内:||
、&&
等逻辑运算,在运行时会发生Short-circuit evaluation
。当||
左值为true
,或者&&
左值为false
时,便不会对右值进行运算。|
、&
等布尔运算则采用Eager evaluation
。即一定会对右值进行运算。
那么如何在实际的开发中使用两者呢,引用 Stackoverflow回答 的举例:
12345 Boolean b = true;if(b || foo.timeConsumingCall()){//we entered without calling timeConsumingCall()}
1234 if(string != null && string.isEmpty()){//we check for string being null before calling isEmpty()}
当然还有一个区别就是|
、&
还可以位操作进行Bitmask
。